package Builder;
import javax.media.opengl.GL2;
import LDraw.Support.type.LDrawGridTypeT;
public class Grid {
private float xGridSpace;
private float yGridSpace;
private float startx;
private float finishx;
private float starty;
private float finishy;
private float height;
private MainCamera camera;
public Grid(MainCamera camera) {
// TODO Auto-generated constructor stub
height = 0;
xGridSpace = 40;
yGridSpace = 40;
startx = -240;
finishx = 240;
starty = -240;
finishy = 240;
this.camera = camera;
}
public void draw(GL2 gl2) {
gl2.glBegin(GL2.GL_LINES); // draw using triangles
xGridSpace = yGridSpace = BuilderConfigurationManager
.getInstance().getGridUnit().getXZValue();
int zoom = (int) (12 * 300.0f / camera
.getDistanceBetweenObjectToCamera());
float adjustedStartx = startx;
float adjustedFinishx = finishx;
float adjustedStarty = starty;
float adjustedFinishy = finishy;
if (zoom >= 24)
zoom = 24;
if (zoom < 4)
zoom = 4;
if (zoom < 8) {
xGridSpace = yGridSpace = LDrawGridTypeT.Medium.getXZValue();
} else if (zoom <= 4)
xGridSpace = yGridSpace = LDrawGridTypeT.Coarse.getXZValue();
if (adjustedStartx < -120 * (25 - zoom) + camera.getLookAtPos().x)
adjustedStartx = -120 * (25 - zoom) + camera.getLookAtPos().x;
if (adjustedFinishx > 120 * (25 - zoom) + camera.getLookAtPos().x)
adjustedFinishx = 120 * (25 - zoom) + camera.getLookAtPos().x;
if (adjustedStarty < -120 * (25 - zoom) + camera.getLookAtPos().z)
adjustedStarty = -120 * (25 - zoom) + camera.getLookAtPos().z;
if (adjustedFinishy > 120 * (25 - zoom) + camera.getLookAtPos().z)
adjustedFinishy = 120 * (25 - zoom) + camera.getLookAtPos().z;
for (float y = adjustedStarty; y <= adjustedFinishy; y += yGridSpace) {
gl2.glColor4d(1.0, 0.7, 0.7, 0.5);
gl2.glVertex3f(adjustedStartx, height, y);
gl2.glVertex3f(adjustedFinishx, height, y);
}
for (float x = adjustedStartx; x <= adjustedFinishx; x += xGridSpace) {
gl2.glColor4d(1.0, 0.7, 0.7, 0.5);
gl2.glVertex3f(x, height, adjustedStarty);
gl2.glVertex3f(x, height, adjustedFinishy);
}
gl2.glEnd();
}
public void setRange(float[] range) {
if (range[0] > -240)
range[0] = -240;
if (range[1] < 240)
range[1] = 240;
if (range[2] > -240)
range[2] = -240;
if (range[3] < 240)
range[3] = 240;
if (range[4] >= 3.40282347E+38f)
range[4] = 0;
if (range[5] <= -3.40282347E+38f)
range[5] = 0;
for (int i = 0; i < 4; i++) {
int r = (int) (range[i] / xGridSpace);
range[i] = (float) r * xGridSpace;
}
startx = range[0];
finishx = range[1];
starty = range[2];
finishy = range[3];
height = range[5];
}
public float getStartx() {
return startx;
}
public void setStartx(float startx) {
this.startx = startx;
}
public float getFinishx() {
return finishx;
}
public void setFinishx(float finishx) {
this.finishx = finishx;
}
public float getStarty() {
return starty;
}
public void setStarty(float starty) {
this.starty = starty;
}
public float getFinishy() {
return finishy;
}
public void setFinishy(float finishy) {
this.finishy = finishy;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
}